/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-02-22
 * Time: 22:43
 */
public class Solution {
//     动态规划
//     dp[i][0] 表示这个位置为 0，所需要的最小反转次数
//     dp[i][1] 表示这个位置为 1，所需要的最小反转次数
//     由于 0 前面必须是 0
//     1 前面可以是 0 也可以是 1
//     所以转换方程
//     dp[i][0]=dp[i-1][0]+(arr[i]=='0')   这个位置本身就是 0 就不需要反转
//     dp[i][1]=Math.min(dp[i-1][0], dp[i-1][1]) + (arr[i]=='1') 本身是 1 不需反转
    public int minFlipsMonoIncr(String s) {
        int length=s.length();
        char[] arr=s.toCharArray();
        int dp0=0;
        int dp1=0;
        for(int i=0;i<length;i++){
            if(arr[i]=='0'){
                dp1=Math.min(dp0, dp1)+1;
            }else{
                dp1=Math.min(dp0, dp1);
                dp0++;
            }
        }
        return Math.min(dp0,dp1);
    }
}